package com.ruoyi.common.util.page;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ser.Serializers;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.entity.BaseEntity;
import com.ruoyi.common.entity.system.SysUser;
import com.ruoyi.common.util.ServletUtils;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.lang.annotation.Target;
import java.util.List;

/**
 * @author LiuXiaoYu
 */
public class PageUtils implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 总记录数
	 */
	private int totalCount;
	/**
	 * 每页记录数
	 */
	private int pageSize;
	/**
	 * 总页数
	 */
	private int totalPage;
	/**
	 * 当前页数
	 */
	private int currPage;
	/**
	 * 列表数据
	 */
	private List<?> list;



	/**
	 * 分页
	 *
	 * @param list       列表数据
	 * @param totalCount 总记录数
	 * @param pageSize   每页记录数
	 * @param currPage   当前页数
	 */
	public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {
		this.list = list;
		this.totalCount = totalCount;
		this.pageSize = pageSize;
		this.currPage = currPage;
		this.totalPage = (int) Math.ceil((double) totalCount / pageSize);
	}

	/**
	 * 分页
	 */
	public PageUtils(IPage<?> page) {
		this.list = page.getRecords();
		this.totalCount = (int) page.getTotal();
		this.pageSize = (int) page.getSize();
		this.currPage = (int) page.getCurrent();
		this.totalPage = (int) page.getPages();
	}

	/**
	 * 从request中获取分页参数
	 * @return
	 */
    public static<T> Page<T> buildPage() {
		long pageNum= Long.parseLong(ServletUtils.getRequest().getParameter(Constants.PAGE_NUM));
		long pageSize= Long.parseLong(ServletUtils.getRequest().getParameter(Constants.PAGE_SIZE));
        return new Page<>(pageNum, pageSize);
	}

    public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getCurrPage() {
		return currPage;
	}

	public void setCurrPage(int currPage) {
		this.currPage = currPage;
	}

	public List<?> getList() {
		return list;
	}

	public void setList(List<?> list) {
		this.list = list;
	}
}